#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<cstring>
#include<string>
#include<cstdio>

using namespace std;

//可以多个执行流进入并同时执行，函数可重入噢
int g_val=100;

void show(const string&name)
{
    cout<<name<<"say# "<<"hello new thread"<<endl;
}

void* threadRoutine(void*args)
{
    const char* name=(const char*)args;
    int cnt=5;
    while(true)
    {
        printf("%s,  pid: %d, g_val: %d, &g_val: 0x%p\n", name,getpid(), g_val, &g_val);
        // show("[new thread]");
        sleep(1);
        // int a=10;
        // a/=0;
        cnt--;
        g_val++;
        if(cnt==0)
            break;
    }
    //直接用来终止进程的，而不能用来终止线程
    // exit(11);

    pthread_exit((void*)1);
    // return (void*)1;  //走到这里，线程默认退出
}

int main()
{
    PTHREAD_CANCELED;

    pthread_t tid;
    pthread_create(&tid,nullptr,threadRoutine,(void*)"Thread 1");
    sleep(1);
    // pthread_cancel(tid);
    // while(true)
    // {
    //     printf("main thread pid: %d, g_val: %d, &g_val: 0x%p, create new thread tid: %p\n", getpid(), g_val, &g_val, tid);       
    //     // show("[main thread]");
    //     sleep(1);
    //     g_val++;
    // }
    void* reval;
    pthread_join(tid,&reval);
   // if ( reval == PTHREAD_CANCELED )
        cout<<"main join quit... , reval:  "<<(long long int)reval<<endl;
    return 0;
}






























// void* threadRun(void*args)
// {
//     while(true)
//     {
//         cout<<"hello threadRun "<<endl;
//         sleep(2);
//     }
//     return nullptr;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,threadRun,0);
    
//     while(true)
//     {
//         cout<<"I runing main thread"<<endl;
//         sleep(1);
//     }
//     return 0;
// }